package com.minglv.mini.tools;

import com.alibaba.fastjson2.JSON;

import java.util.List;
import java.util.Map;
import java.util.TreeMap;

@SuppressWarnings("all")
public class JSONUtils {

    /**
     * map转换成对象
     *
     * @param mapData map数据
     * @param t       泛型
     * @return 泛型
     */
    public static <T> T map2Bean(Map<String, ?> mapData, T t) {
        return (T) JSON.parseObject(JSON.toJSONString(mapData), t.getClass());
    }

    /**
     * java对象转map
     *
     * @param t 泛型
     * @return 泛型
     */
    public static <T> TreeMap bean2Map(T t) {
        return JSON.parseObject(JSON.toJSONString(t), TreeMap.class);
    }

    /**
     * java对象转jsonString
     *
     * @param t 泛型
     * @return 泛型
     */
    public static <T> String bean2JsonString(T t) {
        return JSON.toJSONString(t);
    }

    /**
     * json 转java对象
     *
     * @param jsonData JSON数据
     * @param clazz    反射对象
     * @return Class<T>
     */
    public static <T> T json2Bean(String jsonData, Class<T> clazz) {
        return JSON.parseObject(jsonData, clazz);
    }


    /**
     * json字符串转map
     *
     * @param jsonData JSON数据
     * @return Map<String, String>
     */
    public static TreeMap json2Map(String jsonData) {
        return JSON.parseObject(jsonData, TreeMap.class);
    }

    /**
     * map转换成对象
     *
     * @param mapData map
     * @param clazz   反射对象
     * @return Class<T>
     */
    public static <T> T map2Bean(Map<String, ?> mapData, Class<T> clazz) {
        return (T) JSON.parseObject(JSON.toJSONString(mapData), clazz);
    }

    /**
     * json 转java对象列表
     *
     * @param jsonData JSON数据
     * @param clazz    反射对象
     * @return Class<T>
     */
    public static <T> List<T> json2BeanList(String jsonData, Class<T> clazz) {
        return JSON.parseArray(jsonData, clazz);
    }
}
